/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pushy.server;

/**
 *
 * @author pkoch1
 */
public class BeweglichesObjekt extends Objekt {

    public BeweglichesObjekt(int[] koordinaten, Level level) {
        super(koordinaten, level);
    }
    
    /**
     * Bewegt das Objekt um ein Feld in die gegebene Richtung
     * Überprüft dabei, ob sich das Objekt bewegen kann. Das funktioniert nicht, wenn die Koordinaten außerhalb des Koordinatensystems sind oder ein Unbewegliches Objekt auf der Stelle steht.
     * @return 
     */
    public boolean bewegen() {
        int x = x();
        int y = y();
        
        if(richtung == Objekt.RECHTS) {
            x++;
        }else if(richtung == Objekt.UNTEN) {
            y++;
        }else if(richtung == Objekt.LINKS) {
            x--;
        }else if(richtung == Objekt.OBEN) {
            y--;
        }
        
        if(x < 0 || y < 0 || x >= level.getLevel().length || y >= level.getLevel()[0].length) {return false;}
        
        Objekt objektAnStelle = level.getObjekt(x,y,1);
        if(objektAnStelle == null) {
            bewegen(x, y);
            return true;
        }else if(objektAnStelle instanceof BeweglichesObjekt && this instanceof Pushy && objektAnStelle.getFarbe().equals(farbe)) {
               objektAnStelle.drehen(richtung);
               if(((BeweglichesObjekt) objektAnStelle).bewegen()) {
                   bewegen(x, y);
                   return true;
               }
        }
        
        return false;
    }
    
    public void bewegen(int x, int y) {
        level.setObjekt(x(), y(), 1, null);
        level.setObjekt(x, y, 1, this);
        setKoordinaten(new int[]{x, y, 1});
    }
    
    public boolean bewegen(String richtung) {
        setRichtung(richtung);
        return bewegen();
    }
}
